alvaro.gonzalezsotillo@educa.madrid.org

Bases de datos distribuidas (dblinks)

Álvaro González Sotillo

Created: 2022-01-20 jue 20:05

1. Introducción

  • Hasta ahora, la base de datos es un SPOF (single point of failure)
  • Para evitar este problema, las bases de datos se suelen distribuir
    • Se reparten los datos entre varios servidores
    • Los datos pueden estar o no replicados

1.1. Ventajas de la distribución

  • Tolerancia a fallos
  • Escalabilidad y balanceo de carga
    • CPU
    • Disco
  • Posiblemente, mayor velocidad de lectura

1.2. Desventajas

  • Mayor complejidad
    • Despliegue
    • Lógica de los programas clientes
    • ACID más difícil (aunque suele estar resuelto por los SGBD)
  • Generalmente, escrituras más lentas

2. Particiones de los datos

  • Horizontal
    • Las filas de una tabla se reparten entre servidores
  • Vertical
    • Las columnas de una tabla se reparten entre servidores
  • Mixta
    • Horizontal y vertical combinadas

3. DBLink

  • Un servidor de Oracle hace de cliente de otro servidor
  • Puede servir para particionado vertical/horizontal
  • Las transacciones se coordinan entre todos los servidores de base de datos
    • ACID

3.1. Fichero tnsnames.ora

  • Es el fichero que usan los clientes de Oracle
  • Incluye todos los servidores conocidos por los clientes
  • En $ORACLE_HOME/network/admin/tnsnames.ora
  • En este ejemplo:
    • XE : Nombre de la conexión
    • HOST : Nombre/IP del servidor
    • PORT : Puerto TCP de conexión
    • SERVICE_NAME : SID
XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = profebd.local)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )

3.2. Creación de dblink

  • Suponiendo una conexión de nombre B
Create database link LNK_DE_A_a_B 
  connect to USUARIO 
  identified by CONTRASEÑA 
  USING 'B';
  • Referencia a tablas remotas:
select * from TABLA@LNK_DE_A_a_B; 
  • Llamada a funciones/procedimientos remotos:
procedimiento@LNK_DE_A_a_B( parametro );

3.3. Cadena de conexión

  • La cadena de conexión puede ser:
    • Un nombre de tnsnames.ora
    • Desde la versión 10.2, puede ser host:port/service
      • Si el puerto es 1521, puede omitirse
Create database link LNK_DE_A_a_B 
  connect to USUARIO 
  identified by CONTRASEÑA 
  USING 'servidorB.com/XE';

3.4. Cerrar conexiones

  • Cada usuario que utilice el dblink crea una conexión
  • Se cierra automáticamente cuando el usuario cierre su conexión inicial
  • Se puede forzar el cierre con
ALTER SESSION CLOSE DATABASE LINK linkname;

4. Referencias